const fs = require('fs');
const path = require('path');

// 定义一个函数来移除文件中的注释
function removeComments(filePath) {
  // 读取文件内容
  fs.readFile(filePath, 'utf8', (err, data) => {
    if (err) {
      console.error(err);
      return;
    }

    // 正则表达式匹配HTML风格的注释（用于Vue文件）
    const htmlCommentRegex = //g;

    // 正则表达式匹配JS的块注释
    const blockCommentRegex = /\/\*[\s\S]*?\*\//g;

    // 用空字符串替换掉注释
    const newData = data.replace(htmlCommentRegex, '').replace(blockCommentRegex, '');

    // 将处理后的数据写回文件
    fs.writeFile(filePath, newData, 'utf8', (err) => {
      if (err) {
        console.error(err);
      }
    });
  });
}

// 定义一个函数来遍历目录中的所有文件
function traverseDirectory(directory) {
  fs.readdirSync(directory).forEach(file => {
    const fullPath = path.join(directory, file);
    console.log('%c [ fullPath ]-35', 'font-size:13px; background:pink; color:#bf2c9f;', fullPath)

    // 跳过系统保护的目录和node_modules目录
    if (fullPath.includes('$RECYCLE.BIN') || fullPath.includes('System Volume Information') || fullPath.includes('node_modules')) {
      return;
    }

    try {
      const stats = fs.lstatSync(fullPath);
      if (stats.isDirectory()) {
        // 如果是目录，则递归遍历
        traverseDirectory(fullPath);
      } else if (fullPath.endsWith('.vue') || fullPath.endsWith('.js')) {
        // 如果是Vue或JS文件，则移除注释
        removeComments(fullPath);
      }
    } catch (err) {
      console.error(`Error processing ${fullPath}: ${err.message}`);
    }
  });
}

const projectDirectory = __dirname;
traverseDirectory(projectDirectory);
